/**
 * Student 类 - 学生信息实体类
 * 包含学号、姓名、年龄、成绩等属性
 */
public class Student {
    private String id; // 学号
    private String name; // 姓名
    private int age; // 年龄
    private double score; // 成绩

    /**
     * 无参构造方法
     */
    public Student() {
    }

    /**
     * 全参构造方法
     * 
     * @param id    学号
     * @param name  姓名
     * @param age   年龄
     * @param score 成绩
     */
    public Student(String id, String name, int age, double score) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.score = score;
    }

    // Getter 方法
    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public double getScore() {
        return score;
    }

    // Setter 方法
    public void setId(String id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setScore(double score) {
        this.score = score;
    }

    /**
     * 重写 toString 方法
     * 
     * @return 学生信息字符串
     */
    @Override
    public String toString() {
        return id + "," + name + "," + age + "," + score;
    }

    /**
     * 重写 equals 方法，基于 id 进行比较
     * 
     * @param obj 比较对象
     * @return 是否相等
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null || getClass() != obj.getClass())
            return false;
        Student student = (Student) obj;
        return id != null ? id.equals(student.id) : student.id == null;
    }

    /**
     * 重写 hashCode 方法，基于 id 生成哈希码
     * 
     * @return 哈希码
     */
    @Override
    public int hashCode() {
        return id != null ? id.hashCode() : 0;
    }
}
